<?php

/**
 * Application level Controller
 *
 * This file is application-wide controller file. You can put all
 * application-wide controller-related methods here.
 *
 * PHP 5
 *
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP(tm) Project
 * @package       app.Controller
 * @since         CakePHP(tm) v 0.2.9
 * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
 */
App::uses('Controller', 'Controller');

/**
 * Application Controller
 *
 * Add your application-wide methods in the class below, your controllers
 * will inherit them.
 *
 * @package		app.Controller
 * @link		http://book.cakephp.org/2.0/en/controllers.html#the-app-controller
 */
class AppController extends Controller {

    public $mensagens = array('erros' => array(), 'script' => null, 'sucesso' => null, 'foco' => null);

    public function addErro($erro = null) {
        $this->mensagens['erros'][] = $erro;
    }

    function addScript($script = null) {
        $this->mensagens['script'] = $script;
    }

    function addMensagem($sucesso = null) {
        $this->mensagens['sucesso'] = $sucesso;
    }

    function addFoco($foco = null) {
        if (empty($this->mensagens['foco']))
            $this->mensagens['foco'] = $foco;
    }

    function beforeFilter() {
        if ($this->Session->check('usuario')) {
            
        } else {
//          $this->Session->setFlash("Efetue o login.");
            $this->redirect('/logins');
        }
    }

    function getUsuario() {
        $usuario = $this->Session->read('usuario');
        return $usuario;
    }

    function erros() {
        if (isset($this->mensagens['erros']) && !empty($this->mensagens['erros'])) {
            return true;
        }
        return false;
    }

    // Função que valida o CPF
    function validaCPF($cpf) {
        try {

            if (!isset($cpf) || empty($cpf)) {
                return false;
            }
// Verifiva se o número digitado contém todos os digitos {
            //Etapa 1: Cria um array com apenas os digitos numéricos, isso permite receber o cpf em diferentes formatos como "000.000.000-00", "00000000000", "000 000 000 00" etc...
            $j = 0;
            for ($i = 0; $i < (strlen($cpf)); $i++) {
                if (is_numeric($cpf[$i])) {
                    $num[$j] = $cpf[$i];
                    $j++;
                }
            }
            if (!isset($num)) {
                return false;
            }
            //Etapa 2: Conta os dígitos, um cpf válido possui 11 dígitos numéricos.
            if (count($num) != 11) {
                $isCpfValid = false;
            }
            //Etapa 3: Combinações como 00000000000 e 22222222222 embora não sejam cpfs reais resultariam em cpfs válidos após o calculo dos dígitos verificares e por isso precisam ser filtradas nesta parte.
            else {
                for ($i = 0; $i < 10; $i++) {
                    if ($num[0] == $i && $num[1] == $i && $num[2] == $i && $num[3] == $i && $num[4] == $i && $num[5] == $i && $num[6] == $i && $num[7] == $i && $num[8] == $i) {
                        $isCpfValid = false;
                        break;
                    }
                }
            }
            //Etapa 4: Calcula e compara o primeiro dígito verificador.
            if (!isset($isCpfValid)) {
                $j = 10;
                for ($i = 0; $i < 9; $i++) {
                    $multiplica[$i] = $num[$i] * $j;
                    $j--;
                }
                $soma = array_sum($multiplica);
                $resto = $soma % 11;
                if ($resto < 2) {
                    $dg = 0;
                } else {
                    $dg = 11 - $resto;
                }
                if ($dg != $num[9]) {
                    $isCpfValid = false;
                }
            }
            //Etapa 5: Calcula e compara o segundo dígito verificador.
            if (!isset($isCpfValid)) {
                $j = 11;
                for ($i = 0; $i < 10; $i++) {
                    $multiplica[$i] = $num[$i] * $j;
                    $j--;
                }
                $soma = array_sum($multiplica);
                $resto = $soma % 11;
                if ($resto < 2) {
                    $dg = 0;
                } else {
                    $dg = 11 - $resto;
                }
                if ($dg != $num[10]) {
                    $isCpfValid = false;
                } else {
                    $isCpfValid = true;
                }
            }
            //Trecho usado para depurar erros.
            /*
              if($isCpfValid==true)
              {
              echo "<font color=\"GREEN\">Cpf é Válido</font>";
              }
              if($isCpfValid==false)
              {
              echo "<font color=\"RED\">Cpf Inválido</font>";
              }
             */
            //Etapa 6: Retorna o Resultado em um valor booleano.
            return $isCpfValid;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
            return $false;
        }
    }

    public function validaPesquisa(array $post) {
        foreach ($post as $value)
            if (!empty($value)) return true;

        $this->Session->setFlash(__('Informe um parametro para a pesquisa.'));
        return false;
    }
   
}